package org.ehe.erp.service.stock;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;
import org.ehe.common.mybatis.core.page.PageQuery;
import org.ehe.common.mybatis.core.page.TableDataInfo;
import org.ehe.erp.domain.stock.ErpStock;
import org.ehe.erp.domain.stock.bo.ErpStockBo;
import org.ehe.erp.domain.stock.vo.ErpStockVo;

import java.math.BigDecimal;
import java.util.Collection;
import java.util.List;

/**
 * 产品库存Service接口
 * @author :zhangnn
 * @className :IErpStockService
 * @description: TODO
 * @date 2025-08-28 17:05:58
 */
public interface IErpStockService extends IService<ErpStock> {
    /**
     * 查询ERP 产品库存
     */
    ErpStockVo queryById(Long id);

    /**
     * 查询ERP 产品库存列表
     */
    List<ErpStockVo> queryList(ErpStockBo bo);

    /**
     * 分页查询ERP 产品库存列表
     */
    TableDataInfo<ErpStockVo> queryPageList(ErpStockBo bo, PageQuery page);

    /**
     * 新增ERP 产品库存
     */
    Boolean insertByBo(ErpStockBo bo);

    /**
     * 修改ERP 产品库存
     */
    Boolean updateByBo(ErpStockBo bo);

    /**
     * 校验并批量删除ERP 产品库存信息
     */
    Boolean deleteWithValidByIds(Collection<Long> ids, Boolean isValid);

    /**
     * 根据产品ID和仓库ID查询库存
     */
    ErpStockVo queryByProductAndWarehouse(Long productId, Long warehouseId);

    /**
     * 更新库存数量
     */
    Boolean updateStock(Long productId, Long warehouseId, BigDecimal quantity, String operation);

    /**
     * 批量更新库存
     */
    Boolean batchUpdateStock(List<ErpStockBo> stockList);

    /**
     * 查询低库存产品
     */
    List<ErpStockVo> queryLowStockProducts(BigDecimal threshold);

    /**
     * 按仓库统计库存
     */
    List<ErpStockVo> queryStockGroupByWarehouse();

    /**
     * 校验产品和仓库组合是否唯一
     */
    Boolean isUniqueProductWarehouse(ErpStockBo bo);
}
